home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / jpegagasrc / jpegaga / fromwb.c < prev    next >
C/C++ Source or Header  |  1995-11-08  |  4KB  |  171 lines

  1. /* Start from Workbench */
  2.  
  3. #include <workbench/startup.h>
  4. #include <workbench/workbench.h>
  5.  
  6. #define __NOLIBBASE__
  7. #include <proto/dos.h>
  8. #include <proto/exec.h>
  9. #include <proto/icon.h>
  10. #include "WBFlags.h"
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15.  
  16. #define MAXFILES 500
  17.  
  18. #ifdef __GNUC__
  19. #define MYSTRCMP strcasecmp
  20. #define MYSTRNCMP strncasecmp
  21. #else
  22. #define MYSTRCMP strcmp
  23. #define MYSTRNCMP strncmp
  24. #endif
  25.  
  26. struct Library *IconBase = NULL;
  27.  
  28. extern struct WBArg *wb_arg;
  29. extern int NumPictures;
  30. extern BPTR olddir;
  31.  
  32. /* Flags */
  33. extern short WBFiles;
  34.  
  35. extern struct WBFlags WBFlags;
  36. extern struct WBFlags OldFlags;
  37.  
  38.  
  39. void ParseToolTypes(struct WBArg *wbarg, int initial);
  40.  
  41. BPTR olddir;
  42.  
  43. void FillWB(struct WBStartup *argmsg)
  44. {
  45.  LONG ktr;
  46.  
  47.  /* open icon.library, will be closed by CloseDisplay() */
  48.  
  49.  if(!IconBase)
  50.  {
  51.    if(!(IconBase = OpenLibrary((UBYTE *)"icon.library",33)))
  52.    {
  53.      printf("Could not open icon.library V33 or higher.\n");
  54.      return;
  55.    }
  56.  }
  57.  
  58.  wb_arg = argmsg->sm_ArgList;
  59.  
  60.  if(wb_arg->wa_Lock != 0)
  61.  {
  62.    olddir = CurrentDir(wb_arg->wa_Lock);
  63.  }
  64.  
  65.  ParseToolTypes(wb_arg, 1);
  66.  
  67.  if(olddir)
  68.  {
  69.    CurrentDir(olddir);
  70.    olddir=0;
  71.  }
  72.  
  73.  if(argmsg->sm_NumArgs <= 1) return;
  74.  
  75.  WBFiles=1;
  76.  
  77.  NumPictures = argmsg->sm_NumArgs - 1;
  78.  
  79.  /* printf("NumPictures: %d\n", NumPictures); */
  80.  wb_arg++; 
  81. }
  82.  
  83. void ParseToolTypes(struct WBArg *wbarg, int initial)
  84. {
  85.  struct DiskObject *dobj;
  86.  UBYTE **toolarray;
  87.  char *s;
  88.  
  89.  /* initialize OldFlags even if tool type processing fails */
  90.  
  91.  if(initial) memcpy(&OldFlags, &WBFlags, sizeof(struct WBFlags));
  92.  
  93.  if(!IconBase)
  94.  {
  95.    if(!(IconBase = OpenLibrary((UBYTE *)"icon.library",33)))
  96.    {
  97.      printf("Could not open icon.library V33 or higher.\n");
  98.      return;
  99.    }
  100.  }
  101.  
  102.  if(wbarg)
  103.  if((*wbarg->wa_Name) && (dobj=GetDiskObject(wbarg->wa_Name)))
  104.  {
  105.    toolarray = (UBYTE **)dobj->do_ToolTypes;
  106.    
  107.    if(s=(char *)FindToolType(toolarray, "ARGS"))
  108.    {
  109.      int i=0;
  110.      #ifndef __GNUC__
  111.      strupr(s);
  112.      #endif
  113.      while(1)
  114.      {
  115.        while(s[i] != 0 && s[i] != '-') i++;
  116.        if(s[i] == '-')
  117.        {
  118.          /* printf("Argument found.\n"); */
  119.          if(!MYSTRNCMP(&s[i], "-GRAY", 5)) WBFlags.GrayEnable=1;
  120.  
  121.          else if(!MYSTRNCMP(&s[i], "-VGA", 4)) WBFlags.VGAenable=1;
  122.  
  123.          else if(!MYSTRNCMP(&s[i], "-SUPER72", 8)) WBFlags.SUPER72enable=1;
  124.  
  125.          else if(!MYSTRNCMP(&s[i], "-NOSMOOTH", 9)) WBFlags.NoSmooth=1;
  126.  
  127.          else if(!MYSTRNCMP(&s[i], "-FIT", 4)) WBFlags.ScaleFit=1;
  128.  
  129.          else if(!MYSTRNCMP(&s[i], "-DCT FAST", 9)) WBFlags.DCTFast=1;
  130.  
  131.          else if(!MYSTRNCMP(&s[i], "-DCT INT", 8)) WBFlags.DCTFast=0;
  132.  
  133.          else if(!MYSTRNCMP(&s[i], "-SCALE 1/1", 10)) WBFlags.scale=1;
  134.  
  135.          else if(!MYSTRNCMP(&s[i], "-SCALE 1/2", 10)) WBFlags.scale=2;
  136.  
  137.          else if(!MYSTRNCMP(&s[i], "-SCALE 1/4", 10)) WBFlags.scale=4;
  138.  
  139.          else if(!MYSTRNCMP(&s[i], "-SCALE 1/8", 10)) WBFlags.scale=8;
  140.          
  141.          else if(!MYSTRNCMP(&s[i], "-SMR", 4) && initial) WBFlags.SMRenable=1;
  142.  
  143.          else if(!MYSTRNCMP(&s[i], "-NOGRAY", 7) && !initial) WBFlags.GrayEnable=0;
  144.  
  145.          else if(!MYSTRNCMP(&s[i], "-NOVGA", 6) && !initial) WBFlags.VGAenable=0;
  146.  
  147.          else if(!MYSTRNCMP(&s[i], "-NOSUPER72", 10) && !initial) WBFlags.SUPER72enable=0;
  148.  
  149.          else if(!MYSTRNCMP(&s[i], "-SMOOTH", 7) && !initial) WBFlags.NoSmooth=0;
  150.  
  151.          else if(!MYSTRNCMP(&s[i], "-NOFIT", 6) && !initial) WBFlags.ScaleFit=0;
  152.  
  153.          else if(!MYSTRNCMP(&s[i], "-MAXMEM ", 8) && initial)
  154.          {
  155.            char ch = 'x';
  156.            if (sscanf(&s[i+7], "%ld%c", &WBFlags.MaxMem, &ch) >= 1)
  157.            {
  158.              if (ch == 'm' || ch == 'M') WBFlags.MaxMem *= 1000L;
  159.              WBFlags.MaxMemFlag = 1;
  160.            }
  161.          }
  162.          i++;
  163.        }
  164.        else break;
  165.      }
  166.      if(initial) memcpy(&OldFlags, &WBFlags, sizeof(struct WBFlags));
  167.    }
  168.    FreeDiskObject(dobj);
  169.  }
  170. }
  171.